home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / hardware / cpu115 / cputype.doc < prev    next >
Text File  |  1995-02-27  |  15KB  |  309 lines

  1. ┌───────────┬──────────────────┬─────────────────────────────────────────────┐
  2. │╔════════╗ │File: CPUTYPE.DOC │Subject: CPU/FPU feature detection library.  │
  3. │╠════════╩╗├───────────────┬──┴─────────────────────────────────────────────┤
  4. │║╓─╓─╥─╥╖ ║│Date: 27/02/95 │       Copyright(c) 1992-95 by B-coolWare.      │
  5. │║╙─╨─╨─╜╙─║│Version: 1.15  │ This document should not be changed in any way │
  6. │╚═════════╝│Revision:04/01 │and should be distributed with related software.│
  7. └───────────┴───────────────┴────────────────────────────────────────────────┘
  8.  Document no.: LR-0006.93.95M04.01
  9.  
  10.                        "...Too much is not enough."
  11.                             (Deep Purple)
  12.  
  13.  
  14.                                     Contents
  15.  
  16.                                License Agreement.
  17.  
  18.                     Appendix A. Library Features and Notes.
  19.  
  20.                               Appendix B. Credits.
  21.  
  22.                   Appendix C. Known incompatibilities.
  23.  
  24.                        Appendix D. Files in distribution.
  25.  
  26.     Too-Much-In-One-So-Don't-Get-Lost(tm) CPU/FPU feature detection library
  27.                                     License.
  28.  
  29.  This license regards to the Too-Much-In-One-So-Don't-Get-Lost(tm) CPU/FPU
  30.    detection library version 1.15  dated 27/02/95, mentioned hereafter as
  31.    "source code". It describes your rights, obligations and liabilities as for
  32.    this source code. It took much time to gather all information used to
  33.    produce this code, so the main purpose of this license is to grant anyone
  34.    free access to it. Use it free, give away to anyone, but please do not
  35.    sell or lease it - it's my work, and if you think someone should be paid
  36.    for it, you're not the rite person anyway.
  37.    
  38.  Here it goes:
  39.  
  40.  SOFTWARE STATUS AND COPYRIGHT:
  41.  This source code is free copyrighted software. This means that author reserves
  42.    copyright for this code. This doesn't mean however that you cannot use,
  43.    distribute or modify the code. This just means that you cannot reserve
  44.    copyright for this code or charge money for it. However you may reserve
  45.    copyright for any changes/additions you made to it. See details hereafter.
  46.  
  47.  YOUR RIGHTS AND LIABILITIES:
  48.  You have legal rights to copy, distribute, modify and use entire code or parts
  49.    of it in either commercial or noncommercial software, provided that you do
  50.    not charge additional fee for distribution/incorporation of this code or its
  51.    parts in your own products. If you do so, your rights automatically void and
  52.    you'll be liable for violation of the Russian Copyright Law in Computer
  53.    Programs and Databases as well as other laws and international provisions
  54.    regarding to intellectual property and copyrights. Parties that acquire this
  55.    source code from you will still have their rights for the source code as
  56.    long as they comply with terms of this license. 
  57.  
  58.  YOUR OBLIGATIONS:
  59.  The source code SHOULD be distributed along with this license and you should
  60.    document any changes made to it either in source files or in additional
  61.    documents. The code cannot be distributed partially, you should include all
  62.    files that builds the library plus any additional files needed to compile it
  63.    in the distribution archive/set. Regardless of the extent of modifications
  64.    made by you to this source code, it should remain free, and you should
  65.    provide a way for anyone (and partially the author :) to obtain his own copy
  66.    as of original, so as of modified code. Although you can reserve copyright
  67.    for modifications, the rest of the code will still be copyrighted by
  68.    B-coolWare and you should keep the B-coolWare's copyright notice in the code
  69.    unchanged.
  70.  
  71.  WARRANTIES:
  72.  This source code is provided "AS IS" with no express or implied warranties, 
  73.    including any implied warranties of fitness for particular purpose. Author
  74.    can only guarantee that the code will occupy your disk space. If you modify
  75.    the source code included herein, please add a notification about it and
  76.    complete description of what and how you modified, so that subsequent users
  77.    of this code will know that they use not original but rather modified
  78.    version of the code. 
  79.  
  80.  AUTHOR'S LIABILITY:
  81.  In case of any damage caused by use or misuse of this code or any other kind
  82.    of decease including loss of business profits or valuable information,
  83.    author shall not be liable for it. I expressly disclaim any warranties
  84.    regarding to the quality of this code, or its errorlessness.
  85.  
  86.  AUTHOR'S EXCLUSIVE RIGHTS:
  87.  Author reserves the right to change this code entirely or partially without
  88.    notification to its users. He also reserves the right to use this code in
  89.    any manner in any commercial or non-commercial software of any kind and
  90.    give it away to anyone who ask. And he also reserves the right to change
  91.    software legal status (to shareware, for example) as he sees fit.
  92.  
  93.     If you have any questions, suggestions or usable information on how to
  94.               improve this product, feel free to contact author at
  95.  
  96.  e-mail (preferrable):
  97.  
  98.  2:5028/52.6@fidonet
  99.  bob@ymz.yaroslavl.su (Relcom@Internet) (starting in March 1995)
  100.  do ye think me should arrive on CompuServe? :)
  101.  
  102.  Internet users can also try to reach me at cnit.uniyar.ac.ru: send message to
  103.  root@cnit.uniyar.ac.ru or xor@cnit.uniyar.ac.ru and ask to forward it to me.
  104.  
  105.  
  106.  phones:
  107.  
  108.  +7-(0852)-274-551 (9:00am to 6:00pm, Moscow Time) voice\data 14400/V.32b\fax
  109.  +7-(0852)-238-663 (8:00pm to 10:00pm,Moscow Time) voice
  110.  
  111.  please don't call earlier or later - gimme a break...
  112.  
  113.  paper mail:
  114.  
  115.  150031, 10/4/13,
  116.  Dobrynina Str.,
  117.  Yaroslavl,
  118.  Russia
  119.  
  120.  Vladimir M. Zakharychev (é½áñ¿¼¿α çáσáαδτÑó) aka Bobby Z.
  121.  
  122.  Calls and letters both in English and in Russian are welcome. Please do not
  123.  speak/write in any other language if you want to be answered. Letter bombs
  124.  will be returned to sender :) shhhh-boom-BANG!
  125.  
  126.  Huh...! Hope I made every effort to keep the lawyers happy... :)
  127.  
  128.  
  129.  Appendix A. Library Features and Notes.
  130.  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  131.  The Too-Much-In-One-So-Don't-Get-Lost(tm) CPU/FPU feature detection library
  132.  allows you to distinguish between following 80x86 family CPUs:
  133.  
  134.  Intel 8088,8086,80188,80186,80286,80386DX,80386SX,i486DX,i486SX,Pentium,
  135.  P24D (Pentium Overdrive) and any succeeding CPUs (when they become available),
  136.  NEC V20 and V30,
  137.  AMD Am386SX-40 and Am386DX-40, K5 when it become available,
  138.  Cyrix 486SLC, 486SX/DX/DLC and M1 (586),
  139.  on newer 486s also tries to determine SX/DX/DX2/SL/DX4/Overdrive model,
  140.  UMC U5-S, U5-D (486s) (??? is U5-D real thing?)
  141.  
  142.  FPUs:
  143.  
  144.  Intel 8087,80287,80287XL - not 100% reliable,80387,i487sx and 487 internal,
  145.  Cyrix 2C87,3C87 and 4C87,
  146.  IIT 2C87 and 3C87,
  147.  Weitek 1167 and 1367, both reported simply as Weitek;
  148.  
  149.  determine whether or not the processor is in V86 mode (for DOS programs only)-
  150.  generally this one just tests for PM flag and assumes V86 if it is set for DOS
  151.  + PM combination automatically leads to V86;
  152.  
  153.  determine 386dx chip step (B0 or earlier,B1,D0 or later) - 
  154.   this one tests for known bugs in chips of these steps, it does not reset CPU
  155.   to look at EAX value; doesn't work under Windows;
  156.  
  157.  determine CPU clock speed (for all listed processors, was not checked on some
  158.  models and may require some adjustments). Works fine under _my_ Windows, but
  159.  some people stated it produced incorrect results on their systems;
  160.  
  161.  determine 386 and 486 chip model for Intel/AMD chips when ran in real mode.
  162.  
  163.  Notes.
  164.  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  165.  Note 1:
  166.  
  167.  The source code is commented so I didn't include its description here. I think
  168.  there'll be no problem using it. I also included samples in Turbo Pascal and
  169.  Turbo C, which may be incorporated into your hi-level programs. Lotta probs
  170.  vanished, heh :)
  171.  
  172.  Note 2:
  173.  
  174.  I have no access to Cyrix M1 machines and thus can't check and fix CPU timings
  175.  in CPUSPEED.ASM for this processor. This may lead to inadequate MHz
  176.  reported. If anyone have time and access to an M1-based machine I'd like
  177.  you to check this and fix CPUFix value if needed. And don't forget to contact
  178.  me and send me adjusted value so I'll be able to fix it by myself! Also
  179.  please check if M1 is correctly identified - I'm not quite sure it will. 
  180.  
  181.  Note 3:
  182.  
  183.  Take a look at the batches I provided to simplify compile process and
  184.  correct paths and parameters where needed before running them. This is
  185.  especially true for MAKEC.BAT and MLIB.BAT, for they contain paths I used on
  186.  my PC to compile C version of code. The same modifications required for
  187.  MAKEFILE.
  188.  
  189.  
  190.  Appendix B. Credits.
  191.  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  192.  This appendix contains names and netmail addresses of people who contributed
  193.   to this product in any way, either by adding any methods or by fixing
  194.   existing methods given incorrect results. If you do such additions or fixes,
  195.   please contact me and send modified version of the code so that I'll be able
  196.   to incorporate it in next releases.
  197.  
  198.  My thanx to
  199.  
  200.  1. Igor Dral of 2:50/321@fidonet
  201.     who helped me lot in cleaning the code of bugs, testing, etc. Thanx, pal!
  202.  
  203.  2. VAP of 2:5028/52.6@fidonet (he's my BOSS),
  204.     who helped me with C code - I don't like this language myself :)
  205.  
  206.  3. Alex B. Shamarokov of 2:5020/205.8@fidonet
  207.     who awared me of strange behavior of the code on new Intel' chips with
  208.     CPUID support, so I did an attempt to fix it in v1.14c.
  209.  
  210.  4. Janis Smits of 2:5100/25@fidonet
  211.     who awared me of OS/2 problems and pointed out the origin of them, and
  212.     provided 486 model codes returned by CPUID.
  213.  
  214.  5. Ilya Tumanov of 2:5030/82.6@fidonet
  215.     who advised me to add integer CPU MHz calculations for those who want only
  216.     rough approximation of clock speed and provided 386/486 model retriever.
  217.  
  218.  6. Igor Krasikov of 2:463/59@fidonet
  219.     who first among others told me how to detect OS/2 reliably (I should read
  220.     Ralf's IntList more thoroughly...) and made some other bugfixing.
  221.  
  222.  7. Aleksandr Konosevich of 2:5004/9.7@fidonet
  223.     for shorter Cyrix CPU detection code. He also develops further Cyrix CPU
  224.     distinguishing now.
  225.  
  226.  8. Sergei Frolov of 2:5030/219.9@fidonet
  227.     for P24D distinguishing code.
  228.  
  229.  9. YOUR NAME MIGHT BE HERE...
  230.  
  231.  And, of course, thanks to Almighty God for the inspiration and everything, 
  232.    and all of you, who paid attention to this product, spent your invaluable
  233.    time testing it and maybe even made use of it!
  234.  
  235.  
  236.  Appendix C. Known incompatibilities.
  237.  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  238.  1. Under Soft-Ice 2.62 and below incorrectly states 386DX to be 386SX. This
  239.     is because Soft-Ice's V86 monitor do not allow to toggle ANY flags in
  240.     CR0 from V86 task. All other CPU identifiers does just such a mistake
  241.     under Soft-Ice. Let's hope Nu-Mega will fix their monitor in future
  242.     versions of this nice debugger so we'll be able to get correct results. :)
  243.     The same thing happens in Borland Pascal protected mode applications due
  244.     to Borland's DPMI host but under it 486SX/DX detection doesn't work.
  245.  
  246.  2. Under Windows 3.1 386 chip stepping determination routine crashes DOS
  247.     session due to "invalid instruction". This is due to Windows exception
  248.     handler implementation: it doesn't reflect exception 6 to real mode
  249.     interrupt handler. The fix is: do not invoke this routine under Windows.
  250.  
  251.  3. People say that under OS/2 clock frequency gets divided by 2. I didn't
  252.     find a workaround yet. Those who can't wait may try this: use isInOSZwei
  253.     routine to determine if we're under OS/2 and multiply clock frequency by
  254.     2 (shl 1) if so. This is very rough approach though and I hope to find
  255.     more elegant way to solve the problem. I tried to find a "begin/end criti-
  256.     cal section" call to OS/2's DOS CompBox API and failed. If anyone knows of
  257.     correct and reliable way to enter/leave critical section under OS/2 please
  258.     let me know (but seems there's no such call...).
  259.     Btw, under _my_ OS/2 V3 clock speed is computed correctly... And I'm NOT
  260.     using TAME... No, that doesn't mean this is the origin of the problem, I'm
  261.     just guessing. Remember that?: "Blinker, what are ye doin' there? - 
  262.     Guessing... I guess no one coming..." and later: "I CAN SEE!!! (CRASH!
  263.     BANG!) Nope. I was wrong... :(" :))
  264.  
  265.  4. Protected mode applications made in Borland Pascal 7.0 using Borland's
  266.     DPMI host may terminate with Runtime Error 216 (General Protection Fault)
  267.     if ran from real mode or under some older memory managers. This is due to
  268.     DPMI host implementation: it does not allow to read or write to CR?
  269.     registers from PL other than 0. Normally, most of memory managers and
  270.     DOS Extenders intercept exception 13 and performs offending instructions
  271.     on ring 0 returning results to application issued invalid instruction, but
  272.     DPMI16BI doesn't. The only possible workaround is to kick some asses in
  273.     Borland and make 'em fix their host. :)
  274.  
  275.  
  276.  Appendix D. Files in distribution.
  277.  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  278.  Original issue of the source code as of version 1.15  include:
  279.  
  280.  File         Description
  281.  ------------ ----------------------------------------------------------
  282.  CPU_TYPE.ASH Main library module for ASM programs.
  283.  DOSINOUT.ASH DOS Input/Output routines.
  284.  LSTRING.ASH  Lstring macro to define Pascal-style length,data strings.
  285.  HEADER.ASH   Assembly language header file - memory model definition, etc.
  286.  UNIDEF.INC   Assembly language macros.
  287.  CPU.ASM      Sample program demonstrating usage of CPU_TYPE.ASH.
  288.  CPUSPEED.ASM CPU clock speed determination routine.
  289.  CPU_HL.ASM   Main library module for use with hi-level languages.
  290.  CPU.C          Sample program in C.
  291.  CPUTYPE.C    C library implementation.
  292.  CPUTYPE.H    C library interface.
  293.  CPU.PAS      Sample program in Pascal.
  294.  CPUTYPE.PAS  Pascal library interface & implementation.
  295.  P5INFO.ASM   Low level routines for P5INFO.C and P5INFO.PAS.
  296.  P5INFO.C     Sample program providing basic info on P5 in C.
  297.  P5INFO.PAS   Sample program providing basic info on P5 in Pascal.
  298.  MAKEA.BAT    Make batch for assembly-language version.
  299.  MAKEP.BAT    Make batch for pascal version.
  300.  MAKEC.BAT    Make batch for C version.
  301.  MLIB.BAT     Make batch to build C/C++ .lib library file.
  302.  YESNO.COM    Batch service program, displays prompt and waits for Y/N.
  303.  README.1ST   Readme file. You should already been read it...
  304.  SMM.ASM      SMM test routine.
  305.  MODEL486.ASM Routine to get chip model/submodel code.
  306.  TEST486.PAS  Sample program making use of MODEL486.ASM.
  307.  HISTORY.DOC  History of changes.
  308.  
  309.                           << end of CPUTYPE.DOC >>